/**
 * 自定义Layer弹窗封装
 * 提供拟态风格的弹窗效果，统一在页面中央显示
 */

// 自定义配置
var customLayerConfig = {
    // 拟态风格配置
    neumorphism: {
        color: '#ecf0f3',
        shadow: {
            light: '8px 8px 16px #d1d9e6',
            dark: '-8px -8px 16px #ffffff'
        }
    }
};

/**
 * 初始化Layer全局配置
 */
function initLayerConfig() {
    layer.config({
        skin: 'custom-layer-skin',
        closeBtn: 1,
        shadeClose: true,
        shade: 0.3,
        fixed: true,
        resize: false,
        zIndex: 19891014
    });
}

/**
 * 消息提示框
 * @param {string} msg - 提示内容
 * @param {number} icon - 图标类型：0(无图标) 1(成功) 2(错误) 3(警告) 4(疑问)
 * @param {number} time - 显示时间(毫秒)
 * @param {function} end - 回调函数
 */
function showMessage(msg, icon = 0, time = 1500, end = null) {
    return layer.msg(msg, {
        icon: icon,
        time: time,
        end: end,
        offset: 'center' // 确保在页面中央显示
    });
}

/**
 * 成功提示
 * @param {string} msg - 提示内容
 * @param {function} end - 回调函数
 */
function showSuccess(msg, end = null) {
    return showMessage(msg, 1, 1500, end);
}

/**
 * 错误提示
 * @param {string} msg - 提示内容
 */
function showError(msg) {
    return showMessage(msg, 2, 2000);
}

/**
 * 警告提示
 * @param {string} msg - 提示内容
 */
function showWarning(msg) {
    return showMessage(msg, 3, 1800);
}

/**
 * 信息提示
 * @param {string} msg - 提示内容
 */
function showInfo(msg) {
    return showMessage(msg, 0, 1500);
}

/**
 * 确认对话框
 * @param {string} msg - 提示内容
 * @param {function} okCallback - 确认回调
 * @param {function} cancelCallback - 取消回调
 * @param {string} okBtn - 确认按钮文本
 * @param {string} cancelBtn - 取消按钮文本
 */
function showConfirm(msg, okCallback, cancelCallback = null, okBtn = '确定', cancelBtn = '取消') {
    return layer.confirm(msg, {
        icon: 3,
        btn: [okBtn, cancelBtn],
        title: '确认操作',
        offset: 'center'
    }, function(index) {
        layer.close(index);
        if (typeof okCallback === 'function') {
            okCallback();
        }
    }, function() {
        if (typeof cancelCallback === 'function') {
            cancelCallback();
        }
    });
}

/**
 * 提示对话框
 * @param {string} msg - 提示内容
 * @param {string} title - 标题
 * @param {number} icon - 图标类型
 */
function showAlert(msg, title = '提示', icon = 0) {
    return layer.alert(msg, {
        icon: icon,
        title: title,
        offset: 'center'
    });
}

/**
 * 打开自定义内容的弹窗
 * @param {Object} options - 配置选项
 */
function showCustomDialog(options) {
    var defaults = {
        type: 1,
        title: '自定义弹窗',
        content: '',
        area: ['auto', 'auto'],
        offset: 'center',
        btn: ['确定', '取消'],
        success: null,
        yes: null,
        cancel: null
    };
    
    var settings = $.extend({}, defaults, options);
    
    return layer.open(settings);
}

/**
 * 加载层
 * @param {number|string} param1 - 加载类型或标题
 * @param {string} param2 - 加载内容（可选）
 * @param {number} type - 加载类型（可选）
 */
function showLoading(param1, param2, type = 2) {
    // 使用更可靠的layer.open方法创建加载层
    var title = '加载中';
    var content = '请稍候...';
    
    // 判断参数类型来决定如何处理
    if (typeof param1 === 'string' && typeof param2 === 'string') {
        // 如果param1和param2都是字符串，则把它们作为标题和内容
        title = param1;
        content = param2;
    } else if (typeof param1 === 'string') {
        // 如果只有param1是字符串，则把它作为标题，使用默认内容
        title = param1;
    }
    
    // 创建包含标题和内容的自定义加载层
    // 使用纯CSS实现旋转效果，不依赖Font Awesome
    var loadingHtml = 
        '<div style="padding: 20px; text-align: center;">' +
        '<div style="width: 32px; height: 32px; border: 3px solid #f3f3f3; border-top: 3px solid #1890ff; border-radius: 50%; margin: 0 auto 10px; animation: spin 1s linear infinite;"></div>' +
        '<div style="font-size: 14px; color: #333;">' + content + '</div>' +
        '</div>' +
        '<style>@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }</style>';
    
    return layer.open({
        type: 1,
        title: title,
        content: loadingHtml,
        area: ['320px', 'auto'],
        offset: 'center',
        shade: 0.5,
        shadeClose: false,
        closeBtn: 0,
        zIndex: layer.zIndex,
        maxWidth: 320,
        success: function(layero) {
            // 确保标题显示正常
            $(layero).find('.layui-layer-title').css({
                'padding': '0 10px 0 20px',
                'font-size': '16px',
                'height': '42px',
                'line-height': '42px',
                'color': '#333',
                'background-color': '#fff',
                'border-bottom': '1px solid #eee'
            });
        }
    });
}

/**
 * 关闭弹窗
 * @param {number} index - 弹窗索引
 */
function closeLayer(index) {
    layer.close(index);
}

/**
 * 关闭所有弹窗
 */
function closeAllLayers() {
    layer.closeAll();
}

/**
 * 系统自带的删除确认函数适配
 */

// 分类删除
function app_del_category(id, catename) {
    showConfirm('您确定要删除名称为「' + catename + '」的分类吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'category_ajax.php?act=del',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess('删除成功', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 站点删除
function app_del_site(id, name) {
    showConfirm('您确定要删除名称为「' + name + '」的站点吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'site_ajax.php?act=del',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess('删除成功', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 申请驳回
function app_reject_apply(id, name) {
    showConfirm('您确定要驳回站点「' + name + '」并且放进黑名单吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'apply_ajax.php?act=reject',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess(data.msg || '拒绝申请，放进黑名单成功！', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 申请删除
function app_del_apply(id, name) {
    showConfirm('您确定要删除站点为「' + name + '」的申请吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'apply_ajax.php?act=del',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess('删除成功', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 查看申请详情
function app_view_apply(id, name) {
    $.ajax({
        type: 'POST',
        url: 'apply_ajax.php?act=view',
        data: {
            id: id
        },
        dataType: 'json',
        success: function(data) {
            if (data.code == 0) {
                // 构建查看详情的HTML内容
                var content = '<div class="container-fluid">';
                content += '<div class="row">';
                content += '<div class="col-sm-6">';
                content += '<div class="form-group"><label>网站名称：</label><span>' + data.name + '</span></div>';
                content += '<div class="form-group"><label>网站分类：</label><span>' + data.catename + '</span></div>';
                content += '<div class="form-group"><label>网站链接：</label><a href="' + data.url + '" target="_blank">' + data.url + '</a></div>';
                content += '<div class="form-group"><label>网站关键词：</label><span>' + data.keywords + '</span></div>';
                content += '<div class="form-group"><label>联系方式：</label><span>' + data.contact + '</span></div>';
                content += '<div class="form-group"><label>网站备案号：</label><span>' + data.icp + '</span></div>';
                content += '</div>';
                content += '<div class="col-sm-6">';
                content += '<div class="form-group"><label>网站图标：</label><img src="' + data.favicon + '" width="32" height="32"/></div>';
                content += '<div class="form-group"><label>友链位置：</label><span>' + data.link_location + '</span></div>';
                content += '</div>';
                content += '</div>';
                content += '<div class="row">';
                content += '<div class="col-sm-12">';
                content += '<div class="form-group"><label>网站简介：</label><div style="white-space: pre-wrap;">' + data.introduce + '</div></div>';
                content += '</div>';
                content += '</div>';
                content += '</div>';
                
                // 显示模态框
                showCustomDialog({
                    type: 1,
                    title: '查看站点申请详情 - ' + data.name,
                    area: ['800px', '600px'],
                    content: content,
                    btn: ['关闭'],
                    shadeClose: true
                });
            } else {
                showAlert(data.msg, '提示', 2);
            }
        }
    });
    return false;
}

// 退出登录功能
function logout() {
    showConfirm('确定退出登录 ？', function() {
        var ii = showLoading();
        $.ajax({
            type: 'POST',
            url: 'ajax.php?act=logout',
            dataType: 'json',
            success: function(data) {
                closeLayer(ii);
                if (data.code == 0) {
                    showSuccess('退出登录成功', function() {
                        window.location.assign('login.php');
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            },
            error: function(data) {
                closeLayer(ii);
                showError('服务器错误');
            }
        });
    });
    return false;
}

// 登录表单提交
function loginSubmit() {
    if (!$('input[name="user"]').val()) {
        showAlert('请输入用户名！', '提示', 2);
        return false;
    }
    if (!$('input[name="password"]').val()) {
        showAlert('请输入密码！', '提示', 2);
        return false;
    }
    var ii = showLoading();
    $.ajax({
        type: 'POST',
        url: 'login.php?act=login',
        data: $("#form-login").serialize(),
        dataType: 'json',
        success: function(data) {
            closeLayer(ii);
            if (data.code == 0) {
                $('[name="login"]').addClass('btn-success');
                $('[name="login"]').text('登录成功，跳转中...');
                $('[name="login"]').attr('disabled', true);
                showSuccess(data.msg || '登录成功', function() {
                    window.location.assign('index.php');
                });
            } else {
                showAlert(data.msg, '提示', 2);
            }
        },
        error: function(data) {
            closeLayer(ii);
            showError(data.msg || '服务器错误');
        }
    });
    return false;
}

// 发送验证码
function appSendCode() {
    if (!$('input[name="qq"]').val()) {
        showAlert('请输入QQ号码！', '提示', 2);
        return false;
    }
    var ii = showLoading();
    $.ajax({
        type: 'POST',
        url: 'resetpwd.php?act=sendcode',
        data: $("#form-login").serialize(),
        dataType: 'json',
        success: function(data) {
            closeLayer(ii);
            if (data.code == 0) {
                $('.send-code').addClass('btn-success');
                $('.send-code').text('验证码已发送');
                $('.send-code').attr('disabled', true);
                showSuccess(data.msg || '验证码已发送至QQ邮箱', function() {
                    $('.send-code').hide();
                    $('.send-code').text('发送验证码');
                    $('.send-code').removeClass('btn-success');
                    $('.send-password').show();
                });
            } else {
                showAlert(data.msg, '提示', 2);
            }
        },
        error: function(data) {
            closeLayer(ii);
            showError(data.msg || '服务器错误');
        }
    });
    return false;
}

// 发送新密码
function appSendPassword() {
    if (!$('input[name="qq"]').val()) {
        showAlert('请输入QQ号码！', '提示', 2);
        return false;
    }
    if (!$('input[name="authcode"]').val()) {
        showAlert('请输入验证码！', '提示', 2);
        return false;
    }
    if (!$('input[name="password"]').val()) {
        showAlert('请输入新密码！', '提示', 2);
        return false;
    }
    var ii = showLoading();
    $.ajax({
        type: 'POST',
        url: 'resetpwd.php?act=sendpassword',
        data: $("#form-login").serialize(),
        dataType: 'json',
        success: function(data) {
            closeLayer(ii);
            if (data.code == 0) {
                $('button.send-password').addClass('btn-success');
                $('button.send-password').text('密码已修改');
                $('button.send-password').attr('disabled', true);
                showSuccess(data.msg || '修改成功', function() {
                    window.location.assign('login.php');
                });
            } else {
                showAlert(data.msg, '提示', 2);
            }
        },
        error: function(data) {
            closeLayer(ii);
            showError(data.msg || '服务器错误');
        }
    });
    return false;
}

// 保存账号信息
function appSaveAccount() {
    var ii = showLoading();
    $.ajax({
        type: 'POST',
        url: 'ajax.php?act=account',
        data: $('[name="account-form"]').serialize(),
        dataType: 'json',
        success: function(data) {
            closeLayer(ii);
            if (data.code == 0) {
                showSuccess('保存成功！', function() {
                    window.location.assign(window.location.href);
                });
            } else {
                showAlert(data.msg || '保存失败！', '提示', 2);
            }
        },
        error: function(data) {
            closeLayer(ii);
            showError(data.msg || '服务器错误');
        }
    });
    return false;
}

// 删除公告
function app_del_notice(id) {
    showConfirm('您确定要删除ID为「' + id + '」的公告吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'notice_ajax.php?act=del',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess('删除成功', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 上传图片
function uploadImage(type, filename) {
    var el = $('input[name="' + type + '"]');
    if (!el || !el.val()) {
        showAlert('请选择图片', '提示', 2);
        return;
    }
    var formData = new FormData();
    formData.append('type', filename); // 上传的类型
    formData.append('file', el[0].files[0]); // this.files[0]是文件对象
    var ii = showLoading();
    $.ajax({
        url: 'ajax.php?act=settings_material', // 服务器端点
        type: 'POST',
        data: formData,
        processData: false, // 不要对data进行处理，用于对data是DOM元素的情况
        contentType: false, // 设置为false才能让jQuery发送正确的Content-Type
        success: function(res) {
            closeLayer(ii);
            if (res.code == 0) {
                showSuccess(res.msg || '上传成功', function() {
                    window.location.assign(location.href);
                });
            } else {
                showAlert(res.msg, '提示', 2);
            }
        },
        error: function(err) {
            closeLayer(ii);
            showError(err.msg || '服务器错误');
        }
    });
}

// 恢复审核
function app_reset_apply(id, name) {
    showConfirm('您确定要恢复审核站点「' + name + '」吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'apply_ajax.php?act=reset',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess(data.msg || '恢复审核申请成功！', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 友链删除
function app_del_link(id, name) {
    showConfirm('您确定要删除名称为「' + name + '」的友链吗？', function() {
        $.ajax({
            type: 'POST',
            url: 'link_ajax.php?act=del',
            data: {
                id: id
            },
            dataType: 'json',
            success: function(data) {
                if (data.code == 0) {
                    showSuccess('删除成功', function() {
                        window.location.assign(window.location.href);
                    });
                } else {
                    showAlert(data.msg, '提示', 2);
                }
            }
        });
    });
}

// 页面加载完成后初始化
$(document).ready(function() {
    initLayerConfig();
});